package ComandosFuncionalidadEstado2;

import java.io.IOException;
import java.util.List;

import util.SocketManager;
import BaseDeDatos.ConsultasCelda;
import BaseDeDatos.ConsultasGPS;
import BaseDeDatos.ConsultasMedicion;
import BaseDeDatos.ConsultasSensor;
import ClasesBasicas.Celda;
import ClasesBasicas.Medicion;
import ClasesBasicas.Sensor;
import ProcesarComandos.Procesable;
import Servidor.Peticion;

public class ComandoGetValact implements Procesable {

	@Override
	public void Procesar(String Comando, SocketManager socketManager,
			Peticion peticion) {

		String respuest = "";
		String respuesta = "";
		String Array[] = Comando.split(" ");
		if (Array[0].equals("GET_VALACT") && Array[1].equals("----")) {
			respuesta = "525 ERR Falta parametro id_sensor.";
			try {
				socketManager.Escribir(respuesta + CRLF);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		else if (Array[0].equals("GET_VALACT") && !Array[1].contains("----")) {
			Sensor actual = ConsultasSensor.getSensor(Array[1]);
			if (actual == null) {
				respuesta = "524 ERR Sensor desconocido.";
				try {
					socketManager.Escribir(respuesta + CRLF);
				} catch (IOException e) {
					e.printStackTrace();
				}

			} 
			else if (actual.getEstado().equals("OFF")) {
				respuesta = "526 ERR Sensor en OFF";
				try {
					socketManager.Escribir(respuesta + CRLF);
				} catch (IOException e) {
					e.printStackTrace();
				}

			} else if (actual.getEstado().equals("ON")) {
				System.out.println("Sensor Activado");
				if (ConsultasGPS.getGPS().getEstado().equals("OFF")&&actual.getEstado().equals("ON")) {
					SocketManager managerLoc = null;

					try {
						managerLoc = new SocketManager("127.0.0.1", 4444);
						System.out.println("Conectado a localizacion");
					} catch (IOException e) {

						e.printStackTrace();
					}
					try {
						managerLoc.Escribir("USER Jaimito" + '\n');
					} catch (IOException e) {

						e.printStackTrace();
					}
					try {
						respuest = managerLoc.Leer();
					} catch (IOException e) {

						e.printStackTrace();
					}
					if (respuest.contains("311")) {
						try {
							managerLoc.Escribir("PASS 12345" + '\n');
						} catch (IOException e) {

							e.printStackTrace();
						}
						try {
							respuest = managerLoc.Leer();
						} catch (IOException e) {

							e.printStackTrace();
						}

						if (respuest.contains("312")) {
							List<Celda> celdas = ConsultasCelda.getCeldas();
							int alea = util.GenerarAleatorios.generar(0,
									celdas.size());

							try {
								managerLoc
										.Escribir("GETCOOR "
												+ celdas.get(alea)
														.getId_celda() + '\n');
							} catch (IOException e) {
								e.printStackTrace();
							}
							try {
								respuest = managerLoc.Leer();
							} catch (IOException e) {
								e.printStackTrace();
							}
							try {
								managerLoc.Escribir("SALIR" + '\n');
								managerLoc.CerrarStreams();
								managerLoc.CerrarSocket();
							} catch (IOException e) {

								e.printStackTrace();
							}

							String coorde = respuest.split("OK")[1];
							String latitud = coorde.split("-")[0];
							String longitud = coorde.split("-")[1];

							Medicion nueva = ConsultasMedicion.generarMedicion(
									actual, latitud, longitud);
							ConsultasMedicion.insertarMedicion(nueva, actual);
							respuesta = "224 OK " + nueva.getFecha() + ";"
									+ nueva.getHora() + ";"
									+ nueva.getLatitud() + ";"
									+ nueva.getLongitud()+";"+nueva.getValor();

						}
					}
					try {
						socketManager.Escribir(respuesta + CRLF);
					} catch (IOException e) {
						e.printStackTrace();
					}

				}

				else if (ConsultasGPS.getGPS().getEstado().equals("ON")&&actual.getEstado().equals("ON")) {
					Medicion nueva = ConsultasMedicion.generarMedicion(actual);
					ConsultasMedicion.insertarMedicion(nueva, actual);
					respuesta = "224 OK " + nueva.getFecha() + ";"
							+ nueva.getHora() + ";" + nueva.getLatitud() + ";"
							+ nueva.getLongitud()+";"+nueva.getValor();
					try {
						socketManager.Escribir(respuesta + CRLF);
					} catch (IOException e) {
						e.printStackTrace();
					}

				}

				
			}
		}
	}
}
